package com.example.wochacha.mvpdemo.login;

import com.example.wochacha.mvpdemo.login.presenter.ILoginPresenter;
import com.example.wochacha.mvpdemo.login.presenter.LoginPresenterCompl;
import com.example.wochacha.mvpdemo.login.view.ILoginView;

import dagger.Module;
import dagger.Provides;

/**
 * Created by josan_tang on 2017/12/1.
 * 用于提供依赖
 * 主要是为了提供那些没有构造函数的类的依赖，这些类无法用@Inject标注
 * 比如第三方类库、系统类等
 *
 * 在Module中声明ILoginView属性，在构造方法里通过外界传进来的值赋值，
 * 并通过provide开头的方法提供依赖，我们可以创建多个方法来提供不同的依赖
 *
 * Module要医考Component来发挥作用
 *
 * 用于提供依赖，里面定义一些用@Provides注解的以provide开头的方法
 * 这些方法就是所提供的依赖，Dagger2会在该类中寻找实例化某个类所需要的依赖
 */
@Module
public class LoginModule {
    private final ILoginView iLoginView;

    public LoginModule(ILoginView iLoginView) {
        this.iLoginView = iLoginView;
    }

    @Provides
    ILoginView provideLoginView() {
        return iLoginView;
    }

    @Provides
    ILoginPresenter provideLoginPresenter(ILoginView iLoginView) {
        return new LoginPresenterCompl(iLoginView);
    }
}
